#include <stdio.h>    // 提供输入输出函数，如 printf、scanf、fgets
#include <stdlib.h>   // 提供 atoi、malloc、free 等函数
#include <string.h>   // 提供字符串处理函数，如 strtok
#include <math.h>     // 提供数学函数，如 ceil

// step 1# 判断以速度 k 是否能在 h 小时内吃完所有桃子
int can_finish(int* p, int n, int h, int k) {
    int ans = 0;  // 累计吃桃时间
    for (int i = 0; i < n; i++) {
        ans += (int)ceil((double)p[i] / k);  // 每棵树吃完需要的小时数向上取整
    }
    return ans <= h;  // 若总时间小于等于 h，则说明可行
}

int main() {
    // step 2# 读取输入行（所有桃子数量）
    char input[10000];
    fgets(input, sizeof(input), stdin);  // 读取整行字符串作为输入

    // step 3# 分割字符串存入整数数组 peach_counts[]
    int peach_counts[10000];  // 每棵树上的桃子数量
    int n = 0;  // 树的数量

    char *token = strtok(input, " ");
    while (token != NULL) {
        peach_counts[n++] = atoi(token);  // 转换为整数存入数组
        token = strtok(NULL, " ");
    }

    // step 4# 读取总小时数 h
    int h;
    scanf("%d", &h);

    // step 5# 输入验证（非法情况直接返回0）
    if (n == 0 || h <= 0 || n >= 10000 || h >= 10000 || n > h) {
        printf("0\n");  // 树比小时还多时，无法每小时至少吃一棵
        return 0;
    }

    // step 6# 使用二分查找最小吃速
    int left = 1, right = (int)1e9;  // 定义搜索范围：吃速最低为1，最高为1e9
    while (left < right) {
        int mid = (left + right) / 2;  // 取中间速度
        if (can_finish(peach_counts, n, h, mid)) {
            right = mid;  // 可以吃完，尝试更小速度
        } else {
            left = mid + 1;  // 吃不完，提升吃速
        }
    }

    // step 7# 输出找到的最小可行吃速
    printf("%d\n", left);
    return 0;
}
